package qf.apollo.mywebview;

import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;

/**
 *
 *  WebView控件
 *
 *    1.加载网页显示  加载html数据
 *
 *   TODO 1.基本的使用
 *   TODO 2.控制webView加载
 *
 */

public class MainActivity extends AppCompatActivity {

    private ImageView imageView;
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = (ImageView) findViewById(R.id.image);
        webView = (WebView) findViewById(R.id.webView);

        //设置WebView支持Javascript
        //得到webView的配置
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);

        //TODO 将一个类的对象 传递给Webview的Window容器 供内部的 html/js调用！
        /**
         * 参数1： 传递给的对象
         * 参数2;  别称
         */
        webView.addJavascriptInterface(new MyClass(this),"xiao");


        //设置WebViewClient
        webView.setWebViewClient(new MyWebViewClient());
        //可以获取 网站的title  获取网站的logo  获取网站的具体加载进度
        webView.setWebChromeClient(new MyChromeClient());

        //加载网络页面
//        webView.loadUrl("http://www.baidu.com");

        //设置允许加载本地资源
        settings.setAllowFileAccess(true);
        settings.setAllowContentAccess(true);




        webView.loadUrl("file:///android_asset/index.html");



    }

    public void btnClick(View view) {

         //TODO 点击Button调用JavaScript的 forAndroid

        webView.loadUrl("javascript:forAndroid('android传递过来的参数！！')");

    }

    /**
     * TODO WebViewClient
     *      1.可以防止url通过手机自带的浏览器进行加载
     *      2.可以根据逻辑去拦截网址
     *      3.页面开始加载
     *      4.页面加载完成
     */
    class MyWebViewClient extends WebViewClient{

        /**
         * 注意： webView调用loadUrl() 不会触发此方法！！
         *
         * 当加载内部跳转的url时！第一调用此方法！
         * 可以给咱们一个机会！可以去拦截要加载的url
         * 如果想要拦截 返回值写成true
         * 如果写成 false 和 super 代表不拦截
         *
         * @param view
         * @param url
         * @return
         */
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.e("tag", "shouldOverrideUrlLoading: "+url);
            return super.shouldOverrideUrlLoading(view, url);
        }

        /**
         * 当页面开始加载
         * @param view
         * @param url
         * @param favicon  返回的图标
         */
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);

        }

        /**
         * 当页面加载完成回调
         * @param view
         * @param url
         */
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
        }
    }

    /**
     *
     * TODO 通过设置WebChromeClient可以获取一些方法！
     * TODO 这些方法可以获取当前页面的加载进度 可以获取当前页面的logo  可以获取当前页面的title
     *
     */
    class MyChromeClient extends WebChromeClient{

        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);

            Log.e("tag", "onProgressChanged: "+newProgress );

        }

        @Override
        public void onReceivedTitle(WebView view, String title) {
            super.onReceivedTitle(view, title);
            if (!TextUtils.isEmpty(title))
            {
                //setTitle是Activity的方法！设置ActionBarTitle
                setTitle(title);  //
            }


        }

        //当前网页的logo
        @Override
        public void onReceivedIcon(WebView view, Bitmap icon) {
            super.onReceivedIcon(view, icon);

            if (icon != null)
            {
                imageView.setImageBitmap(icon);
            }

        }
    }



    //返回健监听
    @Override
    public void onBackPressed() {

        //TODO 如果调用WebView加载上一个页面 那么必须要判断是否存在上一个页面
        //TODO 加载下一个页面，同理必须判断是否存在下一个页面


//        webView.canGoBack();  //是否存在上一个页面
//        webView.canGoForward(); //是否存在下一个页面
//
//        webView.goBack();   //加载上一个页面
//        webView.goForward(); //加载下一个面、

        if (webView.canGoBack())
        {
            webView.goBack();
        }else {
            finish(); //关闭当前页面
        }



    }
}
